package com.jse.oo.design.pattern.creational.builder;

import org.junit.Test;

/**
 * 参考 StringBuilder
 * 
 * 例如一个汽车由车轮、发动机、车座、方向盘等等组成，如果没有builder模式，每次创建的时候都要去new，
 * 有了builder模式，就用builder类中新建一个原始对象，然后构造函数去构造原始对象想要的东西，可以有多个构造函数，
 * 最后使用一个builder方法，返回原始对象
 * @author zenghua233
 *
 */
public class BuilderTest {
	
	@Test
	public void testBuilder() {
		Machine machine = new Machine();
		Wheel wheel = new Wheel();
		
		//由于Builder是静态内部类可以直接使用
		Card builder = new Card.Builder(machine, wheel).build();
	}
	
	@Test
	public void testNestedClass() {
		BuilderTest t = new BuilderTest();
		//创建内部类，必须先实例化外部类
		Builder builder = t.new Builder();
	}
	
	class Builder {
		
		public Builder() {
			Builder builder = new Builder();
		}
	}
}
